﻿using System;

namespace Csharp类的属性
{
    class student 
    {
        string name;
        char sex;
        int age;
        int CsharpScore;
        int UnityScore;

        //封装属性
        public string Name 
        {
            get 
            {
                return name;
            }
            set 
            {
                name = value;
            }
        }


        public char  Sex
        {
            get
            {
                return sex;
            }
            set
            {
                if(value!='男'&&value！='女')
                {
                    value = '妖';
                }
                sex = value;
            }
        }

        public int Age
        {
            get
            {
                return age;
            }
            set
            {
                if (value <= 0)
                {
                    value = 0;
                }
                else if (value >= 150)
                {
                    value = 150;
                }
                age = value;
            }
        }

        public int CsharpScore1
        {
            get
            {
                return CsharpScore1;
            }
            set
            {
                if (value <= 0)
                {
                    value = 0;
                }
                else if (value >= 100)
                {
                    value = 100;
                }
                CsharpScore1 = value;
            }
        }


        public int UnityScore1
        {
            get
            {
                return UnityScore1;
            }
            set
            {
                if (value <= 0)
                {
                    value = 0;
                }
                else if (value >= 100)
                {
                    value = 100;
                }
                UnityScore1 = value;
            }
        }



        //创建构造函数
        public student(string name, char sex, int age, int CsharpScore, int Unityscore)
        {
            this.Name = name;//用属性去接受
            this.Sex = sex;
            this.Age = age;
            this.CsharpScore1 = CsharpScore;
            this.UnityScore1 = Unityscore;
        }

        //打招呼
        public void SayHello (string name,int age,char sex )
        {
            Console.WriteLine("我叫{0}，今年{1}岁了。是{2}同学",this.Name,this.Sex,this.Sex);
        }

        public void ShowScore()
        {
            int sum = CsharpScore1 + UnityScore1;
            float avg = sum / 2;
            Console.WriteLine("平均成绩：{0} 总分：{1}",sum,avg);
        }

    }


    class Program
    {
        static void Main(string[] args)
        {


            #region 类的属性
            //小知识补充
            //string.Format(字符串格式化输出)---->返还一个字符串
            //相当于这个------->console.writeLine(字符串格式化输出)
            //console.CLear-----清屏

            //属性：
            //    因为你把字段全public 会非常的不安全，外部可以随意改你的值 程序会出问题
            //    这个时候，我们就把它取消了Public
            //    但外部就不能访问了，所以我们公开了两个api，一个是Get方法，可以让外部访问
            //    一个是set方法，可以接受外部的传参来修改
            //    因为两个方法都是自己定义的，所以可以保护你字段的合法性

            //    后来C#针对这个问题，出了一个特性----属性

            //    属性的劣势——————因为通过方法返回和修改，所以多了性能消耗


            //    属性的声明：
            //           访问修饰符 数据类型 属性名

            //              get {                        ---------->当属性被访问时，会调用get块
            //                                                      可以通过return 返回一个值                                                   
            //                      return name;
            //                  }
            //
            //              set {                        ---------->当属性被赋值时，会调用set块
            //                                                      块中使用value关键字表示传入的值
            //                      name(字段) = Value;
            //                  }
            //   属性名一般和你保护的字段保持一致，只不过首字母大写

            #endregion

            #region 定义一个学生类
            /*定义一个学生类，有五种属性，分别为姓名、性别、年龄、CSharp成绩、Unity成绩
             * 
             * 有两个方法:
             * 一个打招呼:介绍自己叫XX，今年几岁了。是男同学还是女同学。计算自己总分数和平均分的方法并显示。
             * 使用属性完成:年龄必须是0-150之间，成绩必须是0-100性别只能是‘男’，‘女’，
             * 计算自己总分数和平均分的方法并显示。
             * 实例化两个对象并测试:
             * 
             * 张三  男  20岁  80 85
             * 李四  女  19岁  85 90
             * 
             */

            #endregion
        }
    }
}
